"""
闭包
    语法：
        def 外部函数名(参数):
            ....
            def 内部函数名(参数)
                ...
            return 内部函数名

    调用：
        变量 = 外部函数名(参数)
        变量(参数)

    闭包的定义：
        函数中嵌套一个函数，并且将内部函数作为返回值返回
        官方定义： 由函数及其相关引用环境组合而成的实体

    结论：
        当函数调用完毕之后，其内部的局部变量会随着函数的出栈而被销毁
    问题：
        如何实现当函数调用完毕之后，其内部变量（局部变量）依旧保留在栈中？
    答案：
        闭包
"""
# 有内右外
# 内访问外
# 外返回内
# 闭包
num = 100

def fun1():
    a = 10
    print(f'我是fun1，a的值是{a}')

    def fun2():
        # a = 20
        print(f'我是fun2,a的值是{a}')
        print(num)

    # 外部函数把内部函数作为返回值返回
    return fun2

# 调用闭包
result = fun1()
result()

# fun1() # 只执行 我是fun1，a的值是10
